﻿
@{
    ViewData["Title"] = "GetBom";
}

<div class="modal-body">
    <div class="row mb-3">
        <div class="col-md-2">
            <label for="BOM_Number" class="form-label">BOM编号:</label>
            <input id="BOM_Number" type="text" class="form-control" />
        </div>
        <div class="col-md-2">
            <label for="BOM_Theme" class="form-label">BOM主题:</label>
            <input id="BOM_Theme" type="text" class="form-control" />
        </div>
        <div class="col-md-2">
            <label for="Default_BOM" class="form-label">默认BOM:</label>
            <select class="form-select" id="Default_BOM">
                <option value="">请选择默认BOM</option>
                <option value="true">是</option>
                <option value="false">否</option>
            </select>
        </div>
        <div class="col-md-2">
            <label for="Version" class="form-label">版本:</label>
            <input id="Version" type="text" class="form-control" />
        </div>
        <div class="col-md-2">
            <label for="Product_Type" class="form-label">成品类型:</label>
            <select class="form-select" id="Product_Type">
                <option value="">请选择成品类型</option>
                <option value="类型一">类型一</option>
                <option value="类型二">类型二</option>
            </select>
        </div>
        <div class="col-md-2">
            <label for="Product_Name" class="form-label">成品名称:</label>
            <input id="Product_Name" type="text" class="form-control" />
        </div>
    </div>
    <div class="row mb-3">
        <div class="col-md-2">
            <label for="Daily_Output" class="form-label">日产量:</label>
            <input id="Daily_Output" type="text" class="form-control" />
        </div>
        <div class="col-md-2">
            <label for="searchBtn" class="form-label">&nbsp;</label>
            <button type="button" id="searchBtn" class="btn btn-primary w-100" onclick="GetBasic_Information()">查询</button>
        </div>
        <div class="col-md-2">
            <label for="resetBtn" class="form-label">&nbsp;</label>
            <button type="button" id="resetBtn" class="btn btn-secondary w-100" onclick="resetForm()">重置</button>
        </div>
    </div>
    <table class="table table-bordered">
        <div class="col-md-2">
            <label for="searchBtn" class="form-label">&nbsp;</label>
            <button type="button" id="searchBtn" class="btn btn-primary w-100" onclick="AddBasic_Information()">新增</button>
            <button type="button" id="exportBtn" class="btn btn-success w-100" onclick="Daochu()">导出</button>
        </div>
        <thead>
            <tr>
                <th>BOM编号</th>
                <th>BOM主题</th>
                <th>默认BOM</th>
                <th>版本</th>
                <th>成品类型</th>
                <th>成品名称</th>
                <th>日产量</th>
                <th>备注</th>
               
            </tr>
        </thead>
        <tbody id="itemTable">
            <!-- Items will be loaded via AJAX -->
        </tbody>
    </table>
</div>

<!-- 分页容器 -->
<div id="demo-laypage-all"></div>

<!-- 隐藏的文件输入框，用于文件保存位置选择 -->
<input type="file" id="fileInput" style="display: none;" accept=".xlsx" />

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://unpkg.com/layui@2.8.18/dist/layui.js"></script>
<script>
    var pageIndex = 1;
    var pageSize = 15;
    var sumcount = 0;//总条数

    $(function () { 
        GetBasic_Information();
        laypage();
    })
    
    function GetBasic_Information() {
        var BOM_Number = $("#BOM_Number").val();
        var BOM_Theme = $("#BOM_Theme").val();
        var Default_BOM = $("#Default_BOM").val();
        var Version = $("#Version").val();
        var Product_Type = $("#Product_Type").val();
        var Product_Name = $("#Product_Name").val();
        var Daily_Output = $("#Daily_Output").val();
        $.ajax({
            url: "http://localhost:5280/api/WookOrder/Basic_InformationShowHandle",
            type: "get",
            data: {
                PageIndex: pageIndex,
                PageSize: pageSize,
                BOM_Number: BOM_Number,
                BOM_Theme: BOM_Theme,
                Default_BOM: Default_BOM,
                Version: Version,
                Product_Type: Product_Type,
                Product_Name: Product_Name,
                Daily_Output: Daily_Output,
            },
            async: false,
            success: function (res) {
                sumcount = res.totalCount;
                var str = ``;
                $(res.pageData).each(function () {
                    str += `<tr>
                                         <td>${this.boM_Number || ''}</td>
                                         <td>${this.boM_Theme || ''}</td>
                                         <td>${this.default_BOM === true ? '是' : this.default_BOM === false ? '否' : ''}</td>
                                         <td>${this.version || ''}</td>
                                         <td>${this.product_Type || ''}</td>
                                         <td>${this.product_Name || ''}</td>
                                         <td>${this.daily_Output || ''}</td>
                                         <td>${this.notes || ''}</td>
                                         <td>
                                         <input class="layui-btn" type="button" value="详情" onclick="Enid(${this.id})" />
                                         </td>
                            </tr>`;
                });
                $("#itemTable").html(str);
            },
            error: function(xhr, status, error) {
                console.error('获取数据失败:', error);
                console.log('响应状态:', xhr.status);
                console.log('响应内容:', xhr.responseText);
            }
        });
    }

     // 现代文件API导出方法（支持选择保存位置）
     function modernExport(params, fileName) {
         fetch('http://localhost:5280/api/WookOrder/GetBasic_Information?' + params.toString())
             .then(response => {
                 if (!response.ok) {
                     throw new Error('导出失败: ' + response.status);
                 }
                 return response.blob();
             })
             .then(async (blob) => {
                 try {
                     // 使用现代文件API选择保存位置
                     const fileHandle = await showSaveFilePicker({
                         suggestedName: fileName,
                         types: [{
                             description: 'Excel文件',
                             accept: {
                                 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': ['.xlsx']
                             }
                         }]
                     });
                     
                     // 写入文件
                     const writable = await fileHandle.createWritable();
                     await writable.write(blob);
                     await writable.close();
                     
                     // 隐藏加载提示并显示成功消息
                     if (typeof layer !== 'undefined') {
                         layer.closeAll();
                         layer.msg('导出完成！文件已保存到您选择的位置', {icon: 1, time: 3000});
                     } else {
                         alert('导出完成！文件已保存到您选择的位置');
                     }
                 } catch (error) {
                     console.error('文件保存失败:', error);
                     if (error.name === 'AbortError') {
                         // 用户取消了文件选择
                         if (typeof layer !== 'undefined') {
                             layer.closeAll();
                             layer.msg('导出已取消', {icon: 0, time: 2000});
                         } else {
                             alert('导出已取消');
                         }
                     } else {
                         // 其他错误，回退到fetch方法
                         fetchExport(params, fileName);
                     }
                 }
             })
             .catch(error => {
                 console.error('导出错误:', error);
                 // 如果fetch失败，回退到传统方法
                 fallbackExport(params, fileName);
             });
     }

     // Fetch导出方法
     function fetchExport(params, fileName) {
         fetch('http://localhost:5280/api/WookOrder/GetBasic_Information?' + params.toString())
             .then(response => {
                 if (!response.ok) {
                     throw new Error('导出失败: ' + response.status);
                 }
                 return response.blob();
             })
             .then(blob => {
                 // 创建下载链接
                 var url = window.URL.createObjectURL(blob);
                 var link = document.createElement('a');
                 link.href = url;
                 link.download = fileName;
                 link.style.display = 'none';
                 
                 // 添加到页面并触发下载
                 document.body.appendChild(link);
                 link.click();
                 
                 // 清理
                 document.body.removeChild(link);
                 window.URL.revokeObjectURL(url);
                 
                 // 隐藏加载提示并显示成功消息
                 if (typeof layer !== 'undefined') {
                     layer.closeAll();
                     layer.msg('导出完成！文件已保存为: ' + fileName, {icon: 1, time: 3000});
                 } else {
                     alert('导出完成！文件已保存为: ' + fileName);
                 }
             })
             .catch(error => {
                 console.error('导出错误:', error);
                 // 如果fetch失败，回退到传统方法
                 fallbackExport(params, fileName);
             });
     }

     // 备用导出方法（兼容性最好）
     function fallbackExport(params, fileName) {
         try {
             // 创建下载链接
             var downloadUrl = 'http://localhost:5280/api/WookOrder/GetBasic_Information?' + params.toString();
             
             // 创建隐藏的下载链接
             var link = document.createElement('a');
             link.href = downloadUrl;
             link.download = fileName;
             link.style.display = 'none';
             link.target = '_blank';
             
             // 添加到页面并触发下载
             document.body.appendChild(link);
             link.click();
             
             // 延迟清理，确保下载开始
             setTimeout(function() {
                 document.body.removeChild(link);
             }, 1000);
             
             // 隐藏加载提示并显示成功消息
             if (typeof layer !== 'undefined') {
                 layer.closeAll();
                 layer.msg('导出完成！文件已保存为: ' + fileName, {icon: 1, time: 3000});
             } else {
                 alert('导出完成！文件已保存为: ' + fileName);
             }
         } catch (error) {
             console.error('备用导出方法失败:', error);
             if (typeof layer !== 'undefined') {
                 layer.closeAll();
                 layer.msg('导出失败: ' + error.message, {icon: 2, time: 3000});
             } else {
                 alert('导出失败: ' + error.message);
             }
         }
     }

    function Enid(id) 
    { 
        localStorage["id"]=id;
        location.href = '/home/GetBasic_InformationShow';
    }

    // 重置表单函数
    function resetForm() {
        // 清空所有输入框
        $("#BOM_Number").val('');
        $("#BOM_Theme").val('');
        $("#Default_BOM").val('');
        $("#Version").val('');
        $("#Product_Type").val('');
        $("#Product_Name").val('');
        $("#Daily_Output").val('');
        
        // 重置分页参数
        pageIndex = 1;
        
        // 重新加载数据
        GetBasic_Information();
    }

    function AddBasic_Information()
    {
        location.href = '/home/BOMShow';
    }

    // 导出功能
    function Daochu() {
        // 获取查询条件
        var BOM_Number = $("#BOM_Number").val();
        var BOM_Theme = $("#BOM_Theme").val();
        var Default_BOM = $("#Default_BOM").val();
        var Version = $("#Version").val();
        var Product_Type = $("#Product_Type").val();
        var Product_Name = $("#Product_Name").val();
        var Daily_Output = $("#Daily_Output").val();
        
        // 构建查询参数
        var params = new URLSearchParams();
        if (BOM_Number) params.append('BOM_Number', BOM_Number);
        if (BOM_Theme) params.append('BOM_Theme', BOM_Theme);
        if (Default_BOM) params.append('Default_BOM', Default_BOM);
        if (Version) params.append('Version', Version);
        if (Product_Type) params.append('Product_Type', Product_Type);
        if (Product_Name) params.append('Product_Name', Product_Name);
        if (Daily_Output) params.append('Daily_Output', Daily_Output);
        
        // 生成文件名
        var timestamp = new Date().toISOString().slice(0, 19).replace(/:/g, '-');
        var fileName = 'BOM基本信息_' + timestamp + '.xlsx';
        
        // 显示加载提示
        var loadingMsg = '正在导出数据，请稍候...';
        if (typeof layer !== 'undefined') {
            layer.msg(loadingMsg, {icon: 16, time: 0});
        } else {
            alert(loadingMsg);
        }
        
        try {
            // 检查是否支持现代文件API
            if (typeof showSaveFilePicker !== 'undefined') {
                // 方法1：使用现代文件API选择保存位置（Chrome 86+）
                modernExport(params, fileName);
            } else if (typeof fetch !== 'undefined') {
                // 方法2：使用fetch下载文件（推荐）
                fetchExport(params, fileName);
            } else {
                // 方法3：传统下载方法（兼容性最好）
                fallbackExport(params, fileName);
            }
        } catch (error) {
            console.error('导出异常:', error);
            // 如果出现异常，回退到传统方法
            fallbackExport(params, fileName);
        }
    }




    function laypage() {
        layui.use(['laypage'], function () {
            var laypage = layui.laypage;
            // 完整显示
            laypage.render({
                elem: 'demo-laypage-all', // 元素 id
                count: sumcount, // 数据总数
                limit: pageSize,//每页显示的条数
                limits: [15, 20, 25, 30],//每页显示的选择项
                layout: ['count', 'prev', 'page', 'next', 'limit', 'refresh', 'skip'], // 功能布局
                jump: function (obj) {
                    pageIndex = obj.curr;//当前页数初始化
                    pageSize = obj.limit;//当前条数初始化
                    GetBasic_Information();
                }
            });
        });
    }
</script>

